// 经纬度处理 - 使用示例
/***
 getLocation(false).then(
	({ longitude, latitude }) => {
		commonStore.updateLocation({ longitude, latitude });
	 	// 页面逻辑处理
	},
	() => {
		// 用户取消授权 uni.showToast({ title: "获取位置失败，请允许使用位置信息", icon: "none" });
	}
);
***/

/**
 * 定位失败后，重新定位的引导
 * @param errMsg
 * @params needTip 是否需要弹窗提示
 */
export const LOCATION_ERROR_MSG = ["定位相关权限", "system permission denied", "ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF"]
// 打开系统定位服务提示
export function openSystemLocationSetting() {
	// #ifdef MP-WEIXIN
	uni.showModal({
		title: "温馨提示",
		content: "请在系统设置中打开定位服务，已打开的请重新进入小程序",
		confirmText: "我知道了",
		showCancel: false,
	})
	// #endif
}
export function locationFailGuide(errMsg: string, needTip = true) {
	console.log("locationFailGuide", errMsg)
	if (LOCATION_ERROR_MSG.some((msg) => errMsg.indexOf(msg) > -1)) {
		openSystemLocationSetting()
	} else {
		openMiniSetting(needTip)
	}
}

// 打开小程序设置界面
export function openMiniSetting(needTip = true) {
	if (!needTip) {
		uni.openSetting({})
		return
	}
	uni.showModal({
		title: "温馨提示",
		content: "用户地理位置获取失败,请设置允许小程序使用期间访问",
		showCancel: false,
		success: () => {
			uni.openSetting({})
		},
	})
}
/**
 * 获取当前经纬度
 */
export function getLocation(needGuide = true): Promise<{ longitude: number; latitude: number }> {
	return new Promise((resolve, reject) => {
		uni.getLocation({
			// #ifdef MP-WEIXIN
			type: "gcj02",
			// #endif
			success: (res) => {
				resolve({ longitude: res.longitude, latitude: res.latitude })
			},
			fail: (err) => {
				reject(err)
				// 这种情况给了经纬度，但是也走catch，所以直接 return
				const { errMsg } = err
				if (errMsg.indexOf("频繁调用") > -1) return

				// 支付宝提示用户 系统位置服务未开启
				// 1、用户不允许授权 (小程序设置中的地理位置未开启)
				// 2、定位相关权限 (用户系统位置信息设置未开启)
				// 微信提示用户
				// 1、getLocation:fail auth deny (小程序设置中的位置信息未开启 | 用户拒绝授权)
				// 2、getLocation:fail system permission denied (用户系统位置信息设置未开启)
				locationFailGuide(errMsg)
			},
		})
	})
}

// 打开地图
export function openLocation(params: { name: string; address: string; latitude: number; longitude: number }): void {
	const { name, address, latitude, longitude } = params
	if (!latitude || latitude === 0 || !longitude || longitude === 0) {
		uni.showToast({
			title: "经纬度不正确",
			icon: "none",
		})
		return
	}
	uni.openLocation({
		name: name,
		address: address,
		latitude: latitude,
		longitude: longitude,
		success: function () {
			console.log("success")
		},
	})
}
